for loop 相當於C# 等其他語言的foreach循環,對任何提供迭代器(iterator)的對象提供一個歷遍的方式。
他們都提供迭代器:
迭代器(iterator)是什麼?
對於遍歷集合(collection)元素, Kotlin 標準庫支持迭代器的常用機制—對象可按順序提供對元素的訪問權限,而不會暴露集合的底層結構。當需要逐個處理集合的所有元素(例如打印值或對其進行類似更新)時,迭代器非常有用。
Iterable接口的繼承者(包括 Set 與 List)可以通過調用 iterator() 函數獲得迭代器。一旦獲得迭代器它就指向集合的第一個元素;調用 next() 函數將返回此元素,並將迭代器指向下一個元素(如果下一個元素存在)。一旦迭代器通過了最後一個元素,它就不能再用於檢索元素;也無法重新指向到以前的任何位置。要再次遍歷集合,請創建一個新的迭代器。引自kotlin中文站
for(i in collection){ //對當下的i要做的事 }
val str :String = "hello"
for(i in str ) print(i.uppercase()) //變大寫,單行程式碼時花括號{}可寫可不寫
//結果:HELLO
由小到大的升序區間使用的是..運算子,下例表示調用1.rangeTo(3)
for(i in 1 .. 3) print("$i ")
//結果 : 1 2 3
range不含最後一個數:使用until
for(i in 1 until 3) print("$i ")
//結果 : 1 2
降序區間 :
for(i in 3 downTo 1) print("$i ")
//結果 : 3 2 1
透過自訂step ,取等差區間:
//Char類型也可以
for(i in 'a'.. 'h' step 2) print("$i ")
//從a到不超過h的範圍取值
//結果 : a c e g
降序等差區間:
for(i in 10 downTo 0 step 3){print("$i ")}
//從10到不小於0的範圍取值
//結果 : 10 7 4 1
除了step 也可以使用filter這樣做來篩選需要的元素:
print((1..10).filter{i % 3 == 0 //被3整除的元素 })
//結果: [3, 6, 9]
除了用在區間,當然使用在 Array 或 List 或 Set 等集合類都是可以的,集合我們之後可以再開一篇(老高語氣)
fun main() {
val list = listOf<Int>(1, 2, 3, 4)
for(i in list) print(i)
println()
val set = setOf<Int>(1, 1, 2, 3, 4, 5)
for (i in set) print(i)
println()
val array = arrayOf(3,4,5)
for(i in array ) print ("${i*i} ")
}
//結果: 1234
// 12345
// 9 16 25
while跟do-while語句在滿足條件時執行,而do-while至少會執行一次。while loop要注意一定要設定結束的機制,不然條件永遠成立的情況下,您的迴圈就會變成傳說中的無限列車迴圈,下一站:終點-程式崩潰站。
while(條件){
//條件成立執行程式碼
//設置結束迴圈的機制
}
例:
每循環一次都要遞減朝向結束條件接近,依本例 : 當x值小於等於0的時候這個迴圈就會停止,而每次遞減多少可自訂,如 : x-= 2。
fun main() {
var x = 10
while (x > 0) { //x值大於0會執行,換句話說x值小於等於0不會執行
print("$x ")
x--
}
}
do-while會在不經條件判斷的情況下,先執行一次{}內的程式碼一次,然後才會判斷條件符合,才會執行第二次,直到條件判斷為false。
do {
// 要執行的程式碼
//設置結束迴圈的機制
}while(執行條件)
例,印個數字3的九九乘法表:
fun main() {
val num = 3
var i = 1
do {
println("3 * $i = "+ num * i)
i++
}while(i < 10) //i值大於等於10就不會再次執行
}
/*結果:
3 * 1 = 3
3 * 2 = 6
3 * 3 = 9
3 * 4 = 12
3 * 5 = 15
3 * 6 = 18
3 * 7 = 21
3 * 8 = 24
3 * 9 = 27 */
今天就到這,明天見